import routes from "routes"
import Vue from "vue";
import VueRouter from "vue-router";
Vue.use(VueRouter);
import autoLogin from "util/autoLogin.js";
import store from "store";
import config from "config"

const router = new VueRouter({
    routes,
    mode:"history",
    //决定路由切换(跳转)时;可以滚动到哪个位置
    scrollBehavior (to, from, savedPosition) {
        // return 期望滚动到哪个的位置
        return {x:0,y:0}
    },
    linkActiveClass:"active"
})


//定义全局路由守卫(导航守卫)
//全局前置守卫
//让自动登录逻辑执行一遍
let flag = true;
router.beforeEach(async (to, from, next) => {
    //to: Route: 即将要进入的目标 路由对象
    //from: Route: 当前导航正要离开的路由
    //当前这个autoLogin函数 一定要卡住后续和路由守卫相关回调的流程
    //autoLogin是用来做自动登录  这个功能只是在界面刷新的时候需要重新执行
    //全局路由守卫 在任意路由切换时都会执行
    if(flag){
        flag = false;
        await autoLogin()
    }
    //取出userInfo 如果userInfo有值 则是处于登录状态  如果没有值处于未登录状态
    const userInfo = store.state.user.userInfo;
    // 0. 结算页面 支付页面 支付成功页面 个人中心页 在没有登录的情况下是不能访问的
    const paths = config.paths;
    if(userInfo.name){
        //说明 处于登录状态; 如果处于登录状态 页面随便去
        next()
    }else{
        //说明 处于未登录状态; 如果目标路径以paths中的任意一个路径开头 都应该要守住(去登录页)
        //拿到目标路径   "/Pay/123?name="0000"  ["","Pay","123?name="0000"]
        //拿到目标路径   "/Pay?name="0000"  ["","Pay?name="0000"]  "Pay?name="0000":["Pay","name=0000"]
        const targetPath = to.path.split("/")[1].split("?")[0];


        // 判断目标路径是否以paths中的任意一个路径开头
        // const flag = paths.find(path => targetPath.startsWith(path));
        const flag = paths.includes(targetPath)
        if(flag){
            //targetPath 是以"/Trade","/Pay","/PaySuccess","/Center" 当中一个字符串开头的
            next(`/Login?targetPath=${targetPath}`)
        }else{
            next()
        }
    }
})



export default router